Reset Solmara around authority-owned Relay and Evidence - #23
Conversation
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Move the pinned release from v0.21.0 to v0.22.0 so the authority-cell reset lands on the current release rather than one that is already superseded. Relay, Evidence, and Mint move to the v0.22.0 digests, and Relayctl to the v0.22.0 linux-amd64 asset. Every pin was verified against the published artifacts: the three image digests and their org.opencontainers.image version/revision labels come from GHCR, and the Relayctl checksum matches both the release SHA256SUMS and a locally hashed download. All three images carry revision d9a278a5, the v0.22.0 tag commit, so the builder label check holds. The "first coherent release" claims in the README and hosted-deployment docs still refer to v0.21.0, which remains the earliest release publishing all three official images; only the pinned version moves. Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
The UI entrypoint validated SOLMARA_ESIGNET_PUBLIC_HOST and SOLMARA_ESIGNET_UI_PUBLIC_HOST on every start, but only the hosted template carries the placeholders those values substitute. The local topology sets neither, so esignet-ui and esignet-edge exited 78 and nothing published the eSignet ports. Require the public hosts only when the template actually carries placeholders. The hosted template keeps all 12, so hosted rendering stays fail-closed on an absent or injected host. Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: afc3eda937
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -1,6 +1,6 @@ | |||
| // Provenance kinds -> field types (portal spec section 5.3, UX section 3). | |||
| export type FieldKind = 'self' | 'verify' | 'fetch' | 'decision'; | |||
| export type NotaryId = | |||
| export type AuthorityId = | |||
There was a problem hiding this comment.
Preserve the shared portal types additively
Renaming the exported NotaryId contract to AuthorityId makes every existing renderer or provider that still imports NotaryId fail to compile; the same change also replaces Field.notary and later removes required ProofTrace wire members. This shared contract is explicitly additive-only, so retain compatible aliases and properties while introducing the new authority model rather than replacing them in place.
AGENTS.md reference: portal/AGENTS.md:L34-L34
Useful? React with 👍 / 👎.
Both workflows installed just with an unbounded apt-get against Ubuntu's mirrors. That step wedged twice in a row on the merge gate, once for over four hours, so the check never returned and the PR stayed unstable. Download the pinned 1.58.0 linux-musl asset instead and verify its published SHA-256 before use, matching how this repo already pins the Relayctl release asset. Bound both jobs with timeout-minutes so an unreachable dependency fails fast rather than holding the gate open. Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 98cbe8a048
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ); | ||
| } | ||
| function runnerCalls(scenarioKey: string, service: string): RunnerCall[] { | ||
| if (service === 'childBenefit') return [{ scenarioId: 'birth-to-child-benefit', stepId: 'positive' }]; |
There was a problem hiding this comment.
Separate guardian proof from child evidence collection
When the child-benefit flow verifies caregiver-link, this branch routes the gate itself to birth-to-child-benefit/positive; that scenario requests all five child claims, and the federator consequently contacts CRA, NIA, SRO, and MoSD. The dependent evidence is therefore read before guardianVerified is set, defeating the gate described in +page.svelte. Route caregiver verification to a relationship-only step, and invoke the full positive collection only after that proof succeeds.
Useful? React with 👍 / 👎.
| for authority, port in {"cra": 4311, "nia": 4312, "mosd": 4314, "sipf": 4315, "nagdi": 4316}.items(): | ||
| with urllib.request.urlopen(f"http://127.0.0.1:{port}/health", timeout=10) as response: |
There was a problem hiding this comment.
Honor configured Relay ports in smoke probes
When any SOLMARA_*_RELAY_PORT override is used, compose.yaml publishes the Relay on that configured host port, but this smoke still probes only 4311/4312/4314/4315/4316. As a result, just smoke and the release-candidate workflow report unhealthy Relays even though the configured stack is running; resolve each port from the corresponding environment variable as the home and portal probes already do.
Useful? React with 👍 / 👎.
Summary
Release prerequisites
The reset originally targeted Registry Stack v0.19.0. Implementation proved that v0.19.0 Mint could not issue Relay-compatible scoped access tokens and Evidence could not truthfully model Relay V2's declared unresolved response. Those product prerequisites shipped in Registry Stack v0.20.1.
Registry Stack v0.21.0 is the earliest release that publishes the Relay, Evidence, and Mint runtime images this reset requires. Solmara pins v0.22.0, the current release on that line, by exact source tag, source commit, all three official OCI image digests, and the
relayctlrelease-asset SHA-256. Every pin is centralised inversions.env; the release handoff and each hosted deployment consume those same full references without reconstructing them.Relative to v0.21.0, v0.22.0 adds a container runtime deployment preflight, a strict Mint readiness probe, Mint support for compatible OAuth clients, eager validation of Evidence trusted public keys, and root-owned Relay configuration. The Solmara topology is unchanged.
The separate
esignet-relay-authenticatorv0.2.0 release is also pinned by exact JAR SHA-256.Architecture
Generated databases, packages, private keys, secrets, audit files, and runtime bindings remain untracked.
Verification
Passed from a clean checkout at this revision, against Registry Stack v0.22.0 with a live Docker daemon:
v0.22.0tag digest matches its pin, and every image reportsorg.opencontainers.image.version=0.22.0andrevision=d9a278a5…equal toREGISTRY_STACK_SOURCE_COMMIT--require-publiccheck --production,generate,test, andpackagegates: 20 relayctl invocationsThe eSignet UI entrypoint validated
SOLMARA_ESIGNET_PUBLIC_HOSTandSOLMARA_ESIGNET_UI_PUBLIC_HOSTon every start, but only the hosted nginx template carries the placeholders those values substitute. The local topology sets neither, soesignet-uiandesignet-edgeexited 78 and never published the eSignet ports. The renderer now requires the public hosts only when the template actually carries placeholders; the hosted template keeps all 12, so hosted rendering stays fail-closed on an absent or injected host.Rollout
The PR includes side-by-side Coolify provisioning, signer isolation, fixed authority volumes, retained superseded volumes, digest-manifest handoff, rollout checks, and recovery documentation. Hosted images are published from
mainafter this merges, so everyorg.opencontainers.image.revisionlabel names a permanent commit rather than a squashed branch tip. The live cutover then follows the recoverableside-by-side→switch→disablephases, which retain every superseded volume.